package bdqn.hfxt;

import java.util.Scanner;

public class Demo {
    public static void main(String[] args) {
        /**
         * Java代码结构
         * 1) 顺序结构
         * 2) 选择结构
         * 3) 循环结构
         *
         * 循环结构：
         *     会反复执行代码的一种机制。[有限的反复次数]
         *     避免循环次数无限的 “死循环 ”。
         *
         * 循环的四要素[三个组成部分]：
         * 0）变量初始值
         * 1）循环条件
         *       作用：控制循环继续执行还是终止！！！
         * 2）循环操作
         *       需要反复执行的逻辑代码，写在{}内；只执行一次的代码不要写在{}内！
         * 3）矢量变更
         *       改变循环条件，让条件趋向不满足的一个执行语句。
         *       作用：避免 ”死循环“
         *
         * 循环的解题思路：
         * 1）分析题目有没有重复执行代码
         *       有   -->  用循环
         *       没有 -->  不用循环
         * 2）分析使用哪种循环
         *       当循环次数固定时，优先考虑使用for
         *       当条件判断先执行，后执行循环操作时，优先考虑使用while
         *       当条件判断后执行，先执行循环操作时，优先考虑使用do-while
         * 3）编写循环条件
         *      情况一：将条件转变为数值的递增递减
         *      情况二：将条件转变为字符串比较
         * 4）编写循环操作
         *      编写重复执行的代码 [这个代码只写一次！写在{}内]
         * 5）编写矢量变更
         *      编写改变循环条件的执行语句
         *      有时根据题目的要求，矢量变更会和循环操作一致
         *
         * 循环分类：
         * [1] while循环
         *   语法：
         *       while(返回布尔类型循环条件表达式){
         *            循环操作
         *            矢量变更
         *       }
         *   特点：先判断在执行
         *   注意： 当条件为true才会执行循环操作。当条件为false终止循环
         *
         * [2] do-while循环
         *    语法：
         *         do{
         *              循环操作
         *              矢量变更
         *         }while(返回布尔类型循环条件表达式);
         *    特点：先执行一次再判断
         *    注意： 当条件为true才会执行循环操作。当条件为false终止循环
         *
         * [3] for循环
         *    语法：
         *       for(表达式一写变量赋初始值; 表达式二写循环条件; 表达式三写矢量变更){
         *             //循环操作
         *       }
         *    特点：先判断在执行
         *    执行流程：
         *        (1) 表达式一
         *        (2) 表达式二
         *        (3) 循环操作
         *        (4) 表达式三
         *        (5) 表达式二 ....
         *    注意：
         *        分号不能省。表达式都能省！
         *        表达式省了会导致死循环。
         *        表达式二省略不写默认是true
         *
         * 三种循环可以相互转换！
         *
         * 跳转语句：
         *   从指定代码块内跳到指定代码块外。
         *  1）break
         *      作用：终止单层循环。如果break写在switch里，用于终止switch
         *  2）continue
         *      作用：跳过本次循环，直接进入下一次。
         *           continue只能用在循环内。continue之后的代码是不执行
         *  3）return
         *      作用：用于方法的返回结果，用于方法。
         */

        //while循环案例
        //输出三次 “好好学习，天天向上”
        //分析：1）有重复代码，要循环
        //     2）使用while循环
        //     3）使用数值递增实现条件 i 从1到3
        //     4）编写重复语句  sout(“好好学习，天天向上”)
        //     5）矢量变更改变 i的值趋向于超过3，从而终止循环
        /*
        int i = 1;
        while(i<=3){
            System.out.println("好好学习，天天向上");
            i++;
        }
        */

        //老师检查作业，如果没完成，学生继续做。如果完成了，就结束
        /*
        Scanner input = new Scanner(System.in);
        String result = "y";
        while("n".equals(result)){//条件为true才会执行{}
            System.out.println("学生继续做作业！");
            System.out.println("作业完成了吗 y/n ？");
            result = input.next();
        }
        System.out.println("结束！");
        */

        //描述细胞分裂。
        //培养皿中有10个健康细胞，每分钟分裂一次，由一变为二。
        //问多少分钟后，培养皿中达到100个细胞？
        //循环条件：num数值从10递增到100
        //循环操作：更改数据  num *=2;
        //         分钟自增是普通逻辑代码[不是条件]
        //矢量变更：num *=2
        //定义变量存储细胞数量
        /*
        int num = 10;
        //消耗时间
        int time = 0;
        while(num < 100){
            num *= 2;//循环操作和矢量变更
            time++;//循环操作
        }
        System.out.println(time);
        */

        //dou-while循环案例：输出三次 “好好学习，天天向上”
        /*
        int count = -3;
        do {
            System.out.println("好好学习，天天向上");
            count--;
        }while(count > 0);
        */

        //for循环案例：输出三次 “好好学习，天天向上”
        //int i=1;
        //for(; i<=3; i++){
        //    System.out.println("好好学习，天天向上");
        //}

        //for(int i=1; ; i++){
        //    System.out.println("好好学习，天天向上");
        //}

        //for(int i=1; i<=3; ){
        //    System.out.println("好好学习，天天向上");
        //}

        /*
        int i=1;
        for(; i<=3; i++){
            System.out.println("好好学习，天天向上");
        }
        //i 1 2 3 4
        System.out.println(i);
        */

        //for循环执行不固定次数
        /*
        Scanner input = new Scanner(System.in);
        String result = "n";
        for(; "n".equals(result); result=input.next()){
            System.out.println("写作业");
        }
        System.out.println("结束");
        */

        //System.out.println("".substring(0));
        //System.out.println(null.substring(0));

        //break跳转语句
        /*
        int i=1;
        for(; i<=3;i++){
            if(i == 2){
                break;
            }
            System.out.println("第" + i + "次！");
        }
        System.out.println(i);
        */
        //continue跳转语句
        /*
        int i=1;
        for(; i<=3;i++){
            if(i == 2){
                continue;
            }
            System.out.println("第" + i + "次！");
        }
        System.out.println(i);
        if(true){
            break;
        }
        */

        //学校举行10000米长跑比赛，已知：学校跑道每圈1000米。
        //要求：每跑一圈输出跑了多少圈和多少米
        //某同学因体力不支，在跑完第七圈后，退出比赛



    }
}
